#include <getopt.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>


#include "ctrl_misc_led.h"
#include "gpio-sysfs.h"
enum IOFLG {
	io_flag_null = 0,
	io_flag_in = 1,
	io_flag_out_high = 2,
	io_flag_out_low = 3,
};

int io_flag = 0;
int gpio_group_id = -1;
int gpio_num_id = -1;
int muxctrl_reg = -1;
uint32_t muxctrl_val = 0xffffffff;

int gpio_switch(int c)
{
	switch (c) {
	//oraygpio -I -G 2 -N 1,读取gpio2_1
	case 'I':
		io_flag = io_flag_in;
		return 0;
	case 'H':
		io_flag = io_flag_out_high;
		return 0;
	case 'L':
		io_flag = io_flag_out_low;
		return 0;
	case 'G':
		gpio_group_id = *optarg - 'A';
		if (gpio_group_id < 0 || gpio_group_id > 2) {
			printf("unsupport gpio_group_id = %c\n", *optarg);
			exit(0);
		}
		return 0;
	case 'N':
		gpio_num_id = atoi(optarg);
		return 0;
	}
	return -1;
}

int gpio_sp()
{
	int succflg = 0;
	if (io_flag != 0 && gpio_group_id != -1 && gpio_num_id != -1) {
		printf("io_flag %d,gpio_group_id %c gpio_num_id %d,", io_flag, gpio_group_id + 'A', gpio_num_id);
		int pinnum = gpio_group_id * 32 + gpio_num_id;
		gpio_export(pinnum);
		unsigned int val = 0;
		if (io_flag == io_flag_in) {
			gpio_set_dir(pinnum, 0);			
			gpio_get_value(pinnum, &val);
			printf("get %d", val);
			succflg++;
		} else if (io_flag == io_flag_out_high || io_flag == io_flag_out_low) {
			gpio_set_dir(pinnum, 1);
			gpio_set_value(pinnum, io_flag == io_flag_out_high ? 1 : 0);
			printf("set %d", io_flag == io_flag_out_high ? 1 : 0);
			succflg++;
		}
		printf("\n");
	}

	return succflg;
}
